home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / cpu / tms34010 / 34010ops.h < prev    next >
C/C++ Source or Header  |  1999-10-26  |  10KB  |  281 lines

  1. /*** TMS34010: Portable TMS34010 emulator ***********************************
  2.  
  3.     Copyright (C) Alex Pasadyn/Zsolt Vasvari 1998
  4.      originally based on code by Aaron Giles
  5.  
  6.     This is a private include file. Drivers should NOT include it, but
  7.     use TMS34010.h instead.
  8.  
  9. *****************************************************************************/
  10.  
  11. #ifndef _34010OPS_H
  12. #define _34010OPS_H
  13.  
  14. #include "osd_cpu.h"
  15. #include "memory.h"
  16.  
  17. #define SIGN(val) ((val)&0x80000000)
  18.  
  19. #define INVALID_PIX_ADDRESS  0xffffffe0  /* This is the reset vector, this should be ok */
  20.  
  21. #ifndef INLINE
  22. #define INLINE static inline
  23. #endif
  24.  
  25. /* Size of the memory buffer allocated for the shiftr register */
  26. #define SHIFTREG_SIZE         (8*512*sizeof(UINT16))
  27.  
  28. /****************************************************************************/
  29. /* Read a byte from given memory location                                   */
  30. /****************************************************************************/
  31. #define TMS34010_RDMEM(A)       ((unsigned)cpu_readmem29      (A))
  32. #define TMS34010_RDMEM_WORD(A)  ((unsigned)cpu_readmem29_word (A))
  33. #define TMS34010_RDMEM_DWORD(A) ((unsigned)cpu_readmem29_dword(A))
  34.  
  35. /****************************************************************************/
  36. /* Write a byte to given memory location                                    */
  37. /****************************************************************************/
  38. #define TMS34010_WRMEM(A,V) (cpu_writemem29(A,V))
  39. #define TMS34010_WRMEM_WORD(A,V) (cpu_writemem29_word(A,V))
  40. #define TMS34010_WRMEM_DWORD(A,V) (cpu_writemem29_dword(A,V))
  41.  
  42. #define STACKPTR(ADDR)    state.stackbase + TOBYTE((UINT32)(ADDR))
  43.  
  44. /****************************************************************************/
  45. /* I/O constants and function prototypes                                     */
  46. /****************************************************************************/
  47. #define REG_HESYNC        0
  48. #define REG_HEBLNK        1
  49. #define REG_HSBLNK        2
  50. #define REG_HTOTAL        3
  51. #define REG_VESYNC        4
  52. #define REG_VEBLNK        5
  53. #define REG_VSBLNK        6
  54. #define REG_VTOTAL        7
  55. #define REG_DPYCTL        8
  56. #define REG_DPYSTRT        9
  57. #define REG_DPYINT        10
  58. #define REG_CONTROL        11
  59. #define REG_HSTDATA        12
  60. #define REG_HSTADRL        13
  61. #define REG_HSTADRH        14
  62. #define REG_HSTCTLL        15
  63. #define REG_HSTCTLH        16
  64. #define REG_INTENB        17
  65. #define REG_INTPEND        18
  66. #define REG_CONVSP        19
  67. #define REG_CONVDP        20
  68. #define REG_PSIZE        21
  69. #define REG_PMASK        22
  70. #define REG_DPYTAP        27
  71. #define REG_HCOUNT        28
  72. #define REG_VCOUNT        29
  73. #define REG_DPYADR        30
  74. #define REG_REFCNT        31
  75.  
  76. /* Interrupts that are generated by the processor internally */
  77. #define TMS34010_NMI         0x0100    /* NMI Interrupt */
  78. #define TMS34010_HI          0x0200    /* Host Interrupt */
  79. #define TMS34010_DI          0x0400    /* Display Interrupt */
  80. #define TMS34010_WV          0x0800    /* Window Violation Interrupt */
  81.  
  82. /* IO registers accessor */
  83. #define IOREG(reg)         (state.IOregs[reg])
  84. #define CONTEXT_IOREG(c,reg) ((c)->IOregs[reg])
  85. #define PBH (IOREG(REG_CONTROL) & 0x0100)
  86. #define PBV (IOREG(REG_CONTROL) & 0x0200)
  87.  
  88. #define WFIELDMAC(MASK,MAX)                                                         \
  89.     UINT32 shift = bitaddr&0x0f;                                                     \
  90.     UINT32 old;                                                                           \
  91.     bitaddr = (TOBYTE(bitaddr&0xfffffff0));                                            \
  92.                                                                                     \
  93.     if (shift >= MAX)                                                                \
  94.     {                                                                                \
  95.         old = ((UINT32) TMS34010_RDMEM_DWORD(bitaddr)&~((MASK)<<shift));             \
  96.         TMS34010_WRMEM_DWORD(bitaddr,((data&(MASK))<<shift)|old);                    \
  97.     }                                                                                \
  98.     else                                                                            \
  99.     {                                                                                \
  100.         old = ((UINT32) TMS34010_RDMEM_WORD (bitaddr)&~((MASK)<<shift));             \
  101.         TMS34010_WRMEM_WORD (bitaddr,((data&(MASK))<<shift)|old);                       \
  102.     }
  103.  
  104. #define RFIELDMAC_Z(MASK,MAX)                                    \
  105.     UINT32 shift = bitaddr&0x0f;                                \
  106.     bitaddr = TOBYTE(bitaddr&0xfffffff0);                        \
  107.                                                                 \
  108.     if (shift >= MAX)                                            \
  109.     {                                                            \
  110.         return ((TMS34010_RDMEM_DWORD(bitaddr)>>shift)&(MASK));    \
  111.     }                                                            \
  112.     else                                                        \
  113.     {                                                            \
  114.         return ((TMS34010_RDMEM_WORD (bitaddr)>>shift)&(MASK));    \
  115.     }
  116.  
  117. #define RFIELDMAC_S(MASK,MAX)                                    \
  118.     UINT32 ret;                                                    \
  119.     UINT32 shift = bitaddr&0x0f;                                \
  120.     bitaddr = TOBYTE(bitaddr&0xfffffff0);                        \
  121.                                                                 \
  122.     if (shift >= MAX)                                            \
  123.     {                                                            \
  124.         ret = ((TMS34010_RDMEM_DWORD(bitaddr)>>shift)&(MASK));    \
  125.     }                                                            \
  126.     else                                                        \
  127.     {                                                            \
  128.         ret = ((TMS34010_RDMEM_WORD (bitaddr)>>shift)&(MASK));    \
  129.     }
  130.  
  131. #define WFIELDMAC_8                                                \
  132.     if (bitaddr&0x07)                                            \
  133.     {                                                            \
  134.         WFIELDMAC(0xff,9);                                        \
  135.     }                                                            \
  136.     else                                                        \
  137.     {                                                            \
  138.         TMS34010_WRMEM(TOBYTE(bitaddr),data);                    \
  139.     }
  140.  
  141. #define RFIELDMAC_Z_8                                            \
  142.     if (bitaddr&0x07)                                            \
  143.     {                                                            \
  144.         RFIELDMAC_Z(0xff,9);                                    \
  145.     }                                                            \
  146.     else                                                        \
  147.     {                                                            \
  148.         return TMS34010_RDMEM(TOBYTE(bitaddr));                    \
  149.     }
  150.  
  151. #define WFIELDMAC_32                                            \
  152.     if (bitaddr&0x0f)                                            \
  153.     {                                                            \
  154.         UINT32 shift = bitaddr&0x0f;                            \
  155.         UINT32 old;                                                \
  156.         UINT32 hiword;                                            \
  157.         bitaddr &= 0xfffffff0;                                    \
  158.         old =    ((UINT32) TMS34010_RDMEM_DWORD (TOBYTE(bitaddr     ))&(0xffffffff>>(0x20-shift)));    \
  159.         hiword = ((UINT32) TMS34010_RDMEM_DWORD (TOBYTE(bitaddr+0x20))&(0xffffffff<<shift));        \
  160.         TMS34010_WRMEM_DWORD(TOBYTE(bitaddr     ),(data<<      shift) |old);                        \
  161.         TMS34010_WRMEM_DWORD(TOBYTE(bitaddr+0x20),(data>>(0x20-shift))|hiword);                        \
  162.     }                                                            \
  163.     else                                                        \
  164.     {                                                            \
  165.         TMS34010_WRMEM_DWORD(TOBYTE(bitaddr),data);                \
  166.     }
  167.  
  168. #define RFIELDMAC_32                                            \
  169.     if (bitaddr&0x0f)                                            \
  170.     {                                                            \
  171.         UINT32 shift = bitaddr&0x0f;                            \
  172.         bitaddr &= 0xfffffff0;                                    \
  173.         return (((UINT32)TMS34010_RDMEM_DWORD (TOBYTE(bitaddr     ))>>      shift) |    \
  174.                         (TMS34010_RDMEM_DWORD (TOBYTE(bitaddr+0x20))<<(0x20-shift)));    \
  175.     }                                                            \
  176.     else                                                        \
  177.     {                                                            \
  178.         return TMS34010_RDMEM_DWORD(TOBYTE(bitaddr));            \
  179.     }
  180.  
  181.  
  182. void wfield_01(UINT32 bitaddr, UINT32 data);
  183. void wfield_02(UINT32 bitaddr, UINT32 data);
  184. void wfield_03(UINT32 bitaddr, UINT32 data);
  185. void wfield_04(UINT32 bitaddr, UINT32 data);
  186. void wfield_05(UINT32 bitaddr, UINT32 data);
  187. void wfield_06(UINT32 bitaddr, UINT32 data);
  188. void wfield_07(UINT32 bitaddr, UINT32 data);
  189. void wfield_08(UINT32 bitaddr, UINT32 data);
  190. void wfield_09(UINT32 bitaddr, UINT32 data);
  191. void wfield_10(UINT32 bitaddr, UINT32 data);
  192. void wfield_11(UINT32 bitaddr, UINT32 data);
  193. void wfield_12(UINT32 bitaddr, UINT32 data);
  194. void wfield_13(UINT32 bitaddr, UINT32 data);
  195. void wfield_14(UINT32 bitaddr, UINT32 data);
  196. void wfield_15(UINT32 bitaddr, UINT32 data);
  197. void wfield_16(UINT32 bitaddr, UINT32 data);
  198. void wfield_17(UINT32 bitaddr, UINT32 data);
  199. void wfield_18(UINT32 bitaddr, UINT32 data);
  200. void wfield_19(UINT32 bitaddr, UINT32 data);
  201. void wfield_20(UINT32 bitaddr, UINT32 data);
  202. void wfield_21(UINT32 bitaddr, UINT32 data);
  203. void wfield_22(UINT32 bitaddr, UINT32 data);
  204. void wfield_23(UINT32 bitaddr, UINT32 data);
  205. void wfield_24(UINT32 bitaddr, UINT32 data);
  206. void wfield_25(UINT32 bitaddr, UINT32 data);
  207. void wfield_26(UINT32 bitaddr, UINT32 data);
  208. void wfield_27(UINT32 bitaddr, UINT32 data);
  209. void wfield_28(UINT32 bitaddr, UINT32 data);
  210. void wfield_29(UINT32 bitaddr, UINT32 data);
  211. void wfield_30(UINT32 bitaddr, UINT32 data);
  212. void wfield_31(UINT32 bitaddr, UINT32 data);
  213. void wfield_32(UINT32 bitaddr, UINT32 data);
  214.  
  215. INT32 rfield_s_01(UINT32 bitaddr);
  216. INT32 rfield_s_02(UINT32 bitaddr);
  217. INT32 rfield_s_03(UINT32 bitaddr);
  218. INT32 rfield_s_04(UINT32 bitaddr);
  219. INT32 rfield_s_05(UINT32 bitaddr);
  220. INT32 rfield_s_06(UINT32 bitaddr);
  221. INT32 rfield_s_07(UINT32 bitaddr);
  222. INT32 rfield_s_08(UINT32 bitaddr);
  223. INT32 rfield_s_09(UINT32 bitaddr);
  224. INT32 rfield_s_10(UINT32 bitaddr);
  225. INT32 rfield_s_11(UINT32 bitaddr);
  226. INT32 rfield_s_12(UINT32 bitaddr);
  227. INT32 rfield_s_13(UINT32 bitaddr);
  228. INT32 rfield_s_14(UINT32 bitaddr);
  229. INT32 rfield_s_15(UINT32 bitaddr);
  230. INT32 rfield_s_16(UINT32 bitaddr);
  231. INT32 rfield_s_17(UINT32 bitaddr);
  232. INT32 rfield_s_18(UINT32 bitaddr);
  233. INT32 rfield_s_19(UINT32 bitaddr);
  234. INT32 rfield_s_20(UINT32 bitaddr);
  235. INT32 rfield_s_21(UINT32 bitaddr);
  236. INT32 rfield_s_22(UINT32 bitaddr);
  237. INT32 rfield_s_23(UINT32 bitaddr);
  238. INT32 rfield_s_24(UINT32 bitaddr);
  239. INT32 rfield_s_25(UINT32 bitaddr);
  240. INT32 rfield_s_26(UINT32 bitaddr);
  241. INT32 rfield_s_27(UINT32 bitaddr);
  242. INT32 rfield_s_28(UINT32 bitaddr);
  243. INT32 rfield_s_29(UINT32 bitaddr);
  244. INT32 rfield_s_30(UINT32 bitaddr);
  245. INT32 rfield_s_31(UINT32 bitaddr);
  246. INT32 rfield_32(UINT32 bitaddr);
  247.  
  248. INT32 rfield_z_01(UINT32 bitaddr);
  249. INT32 rfield_z_02(UINT32 bitaddr);
  250. INT32 rfield_z_03(UINT32 bitaddr);
  251. INT32 rfield_z_04(UINT32 bitaddr);
  252. INT32 rfield_z_05(UINT32 bitaddr);
  253. INT32 rfield_z_06(UINT32 bitaddr);
  254. INT32 rfield_z_07(UINT32 bitaddr);
  255. INT32 rfield_z_08(UINT32 bitaddr);
  256. INT32 rfield_z_09(UINT32 bitaddr);
  257. INT32 rfield_z_10(UINT32 bitaddr);
  258. INT32 rfield_z_11(UINT32 bitaddr);
  259. INT32 rfield_z_12(UINT32 bitaddr);
  260. INT32 rfield_z_13(UINT32 bitaddr);
  261. INT32 rfield_z_14(UINT32 bitaddr);
  262. INT32 rfield_z_15(UINT32 bitaddr);
  263. INT32 rfield_z_16(UINT32 bitaddr);
  264. INT32 rfield_z_17(UINT32 bitaddr);
  265. INT32 rfield_z_18(UINT32 bitaddr);
  266. INT32 rfield_z_19(UINT32 bitaddr);
  267. INT32 rfield_z_20(UINT32 bitaddr);
  268. INT32 rfield_z_21(UINT32 bitaddr);
  269. INT32 rfield_z_22(UINT32 bitaddr);
  270. INT32 rfield_z_23(UINT32 bitaddr);
  271. INT32 rfield_z_24(UINT32 bitaddr);
  272. INT32 rfield_z_25(UINT32 bitaddr);
  273. INT32 rfield_z_26(UINT32 bitaddr);
  274. INT32 rfield_z_27(UINT32 bitaddr);
  275. INT32 rfield_z_28(UINT32 bitaddr);
  276. INT32 rfield_z_29(UINT32 bitaddr);
  277. INT32 rfield_z_30(UINT32 bitaddr);
  278. INT32 rfield_z_31(UINT32 bitaddr);
  279.  
  280. #endif /* _34010OPS_H */
  281.